home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / text / tex / EVPaths140.lha / SNPrintf.a < prev    next >
Text File  |  1994-10-30  |  1KB  |  64 lines

  1. ;
  2. ; SNPrintf.a
  3. ;
  4. ; Version 1.1 (30 Oct 1994)
  5. ; Written by Giuseppe Ghibò <ghibo@galileo.polito.it>
  6. ; C prototype:
  7. ;
  8. ; LONG __stdargs SNPrintf(STRPTR String, LONG Size, STRPTR FmtString, ...);
  9.  
  10.  
  11.     SECTION text,code
  12.  
  13. _LVORawDoFmt     EQU -$20a
  14.  
  15.     XDEF    _SNPrintf
  16. ;    XREF    _LVORawDoFmt
  17.  
  18. _SNPrintf:
  19.  
  20.     movem.l    a2-a4/a6,-(sp)
  21.     move.l    5*4(sp),a3    ; Get output string pointer
  22.  
  23.     move.l    6*4(sp),a4    ; Get size of string buffer
  24.     beq.b    exit        ; 
  25.  
  26.     move.l    7*4(sp),a0    ; Get format string pointer
  27.     lea.l    8*4(sp),a1    ; Get the pointer to the data stream
  28.  
  29.     lea.l    copychr(pc),a2    ; PutChProc
  30.  
  31.     adda.l    a3,a4
  32.     move.l    a4,_SNPrintf__BufEnd
  33.  
  34.     move.l    4.W,a6
  35.     jsr    _LVORawDoFmt(a6)
  36.  
  37.     move.l    _SNPrintf__Last,d0
  38.     sub.l    a3,d0        ; returns string length
  39.  
  40. exit:
  41.     movem.l    (sp)+,a2-a4/a6
  42.     rts
  43.  
  44. copychr:
  45.     movem.l    a5,-(sp)    ; save a5 register
  46.     move.l    _SNPrintf__BufEnd,a5
  47.     cmpa.l    a5,a3
  48.     blt    nextchr
  49.     subq.l    #1,a3
  50.  
  51. nextchr:
  52.     move.l    a3,_SNPrintf__Last
  53.     move.b    d0,(a3)+
  54.     movem.l    (sp)+,a5    ; restore a5 register
  55.     rts
  56.  
  57.     CNOP 0,4
  58.  
  59. _SNPrintf__BufEnd:    ds.l    1
  60. _SNPrintf__Last:    ds.l    1
  61.  
  62.     END
  63.